#include<stdio.h>
#include<string.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
  pid_t Ids[10];
  for(int i=0;i<10;i++)
  {
    pid_t id=fork();
    if(id==0)
    {
      //child
      int count=10;
      while(count>0)
      {
        printf("child do someting... %d, %d\n",getpid(),getppid());
        sleep(1);
        count--;
      }
      exit(i);
    }
    //father
    Ids[i]=id;
  }
    int count=0;
    while(count<10)
    {
      int status=0;
      pid_t ret=waitpid(Ids[count],&status,0);
      if(ret>=0)
      {
        printf("wait child success!,%d  \n",ret);
        if(WIFEXITED(status))
        {
          printf("child status : %d \n",WEXITSTATUS(status));
        }
        else 
        {
          printf("child not exit normal! \n");
        }
//        printf("child get signal : %d \n",status&0x7F);
//        printf("child exit code : %d \n",(status>>8)&0xFF);
      }
      count++;
    }
//  pid_t id=fork();
//  if(id==0)
//  {
//    //child
//    int count=0;
//    while(count<30)
//    {
//      printf("I am chlid...  pid: %d  ppid: %d \n",getpid(),getppid());
//      sleep(1);
//      if(count==10)
//      {
//       // count=count/0; //会返回8信号，表示浮点数报错
//      // int *p;
//      // *p=100;//返回信号11，表示发生段错误
//      }
//      count++;
//    }
//    exit(0);
//  }
//  else 
//  {
//    //father
//    printf("I am father...  pid: %d  ppid: %d \n",getpid(),getppid());
//    //pid_t ret=wait(NULL);
//    int status=0;
//    pid_t ret=waitpid(id,&status,0);
//    if(ret>=0)
//    {
//      printf("wait child success...  ret:%d\n",ret);
//    }
//    printf("father run....\n");
//    printf("child status : %d \n",status);
//    printf("child exit code : %d \n",(status>>8)&0xFF);
//    printf("child get signal : %d \n",status&0x7F);
//    sleep(10);
//  }
//  for(int i=0;i<150;i++)
//  {
//    printf("%d:   %s\n",i,strerror(i));
//  }
  return 0;
}
